using System;
using System.Windows.Forms;
using App.Git.Vista.Widgets;
using App.Modelo.Attributes;
using App.Modelo.Menu;
using App.Persistencia;
using App.Seguridad.Vista.Menu;
using App.SolInf.Controlador;
using App.SolInf.Modelo;
using App.SolInf.Vista.Controls;


namespace App.SolInf.Vista.Listado
{
    [Formulario("Proveedores")]
    public partial class ListadoProveedor : ListadoBusquedaGenerico
    {
        public FiltroBusquedaCliente ControlBusqueda = new FiltroBusquedaCliente();

        private ControladoraProveedores _controladoraProveedores;
        public ControladoraProveedores ControladoraProveedores
        {
            get
            {
                return _controladoraProveedores ??
                       (_controladoraProveedores =
                        ModuloSolInf.Instance.FabricaControladoras.Factory<ControladoraProveedores>());
            }
            set
            {
                _controladoraProveedores = value;
            }
        }
			

        public ListadoProveedor()
        {
            ContenedorModulo = ModuloSolInf.Instance;

            BotonCancelar = BotonSeleccionar = false;

            AddColumn("Nombre", "NombreFantasia");
            AddColumn("Razon Social", "RazonSocial");
            AddColumn("Domicilio", "Domicilio");


            SearchControls.Add(ControlBusqueda);
            var controladorBoton = new MenuControladoraBotonera
            {
                Controls = ControlesGestion,
                Model = new MenuContenedor(new MenuBaseItem[] {
                        new MenuBoton("Nuevo", "add", "Proveedores/alta"),
                        new MenuBoton("Ver", "view", "Proveedores/ver"),
                        new MenuBoton("Modificar", "edit", "Proveedores/modificar"),
                        new MenuBoton("Eliminar", "delete", "Proveedores/baja")
                    })
            };

            controladorBoton.ExecuteCommand += new EventHandler<MenuEjecutarComandoEventArgs>(controladorBoton_ExecuteCommand);
        }


        void controladorBoton_ExecuteCommand(object sender, MenuEjecutarComandoEventArgs e)
        {
            var item = GetSelectedItem<Proveedor>();

            if (e.Item.Command == "Proveedores/alta")
            {
                new Comandos.ComandoAltaProveedor().Ejecutar();
            }
            else if (e.Item.Command == "Proveedores/ver" && _seleccionar())
            {
                var form = new DetalleClienteForm
                {
                    Empresa = (Proveedor)ItemSeleccionado,
                    Controladora = ControladoraProveedores
                };
                form.Ver();
            }
            else if (e.Item.Command == "Proveedores/modificar" && _seleccionar())
            {
                var form = new DetalleClienteForm
                {
                    Empresa = (Proveedor)ItemSeleccionado,
                    Controladora = ControladoraProveedores
                };
                form.Modificar(); 
            }
            else if (e.Item.Command == "Proveedores/baja" && _confirmar())
            {
                try
                {
                    ControladoraProveedores.Baja(item);
                    MessageBox.Show("Se elimino el proveedor", Text);
                    OnSearch();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
        }

        protected override void OnSearch()
        {
            DataSource = ControlBusqueda.AplicarFiltro(ControladoraProveedores.Consultar())
                .List<Proveedor>();
        }

        [Comando("modificar", "Modifica un Proveedor existente en la base de datos")]
        public void Modificar()
        {
            ContenedorModulo.AbrirFormulario(this);
        }

        [Comando("ver")]
        public void ver()
        {
            ContenedorModulo.AbrirFormulario(this);
        }

        [Comando("baja")]
        public void Baja()
        {
            ContenedorModulo.AbrirFormulario(this);
        }
    }
}